import re
import subprocess
import sys  # 新增：用于输出实时日志


def sync_requirements_to_poetry():
    # 1. 读取requirements.txt中的依赖（过滤注释和空行，提取包名和版本）
    deps = []
    with open("../deps/requirements.txt", "r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            # 跳过注释、空行和URL形式的依赖（如git+https://...）
            if not line or line.startswith("#") or "git+" in line:
                continue
            # 匹配 "包名==版本号" 格式（兼容带额外约束的行）
            match = re.match(r"^([a-zA-Z0-9_-]+)==([0-9a-zA-Z.+-]+)", line)
            if match:
                pkg_name, pkg_version = match.groups()
                deps.append(f"{pkg_name}=={pkg_version}")

    if not deps:
        print("未从requirements.txt中找到有效依赖，请检查文件内容！")
        return

    # 2. 批量调用Poetry添加依赖（显示实时输出）
    print(f"共发现{len(deps)}个依赖，开始同步到Poetry...")
    try:
        # 关键修改：不捕获输出，直接打印到控制台；或用communicate获取完整输出
        result = subprocess.run(
            ["poetry", "add"] + deps,
            check=True,
            stdout=sys.stdout,  # 实时输出stdout
            stderr=sys.stderr,  # 实时输出stderr
            text=True,
            encoding="utf-8"
        )
        print("✅ 所有依赖已成功同步到Poetry！")
        print("请检查 pyproject.toml 和 poetry.lock 文件，确认版本已更新。")
    except subprocess.CalledProcessError as e:
        print(f"❌ 同步失败！返回码：{e.returncode}")
    except FileNotFoundError:
        print("❌ 未找到Poetry命令，请确保Poetry已正确安装并添加到系统环境变量！")


if __name__ == "__main__":
    sync_requirements_to_poetry()